import axios from 'axios';
import { ElMessage } from 'element-plus';

/**
 * 创建axios实例对象
 * 配置请求的根路径、超时时间、请求头
*/
const _axios = axios.create({
    baseURL: "http://localhost:3000",
    timeout: 3000,
    headers: {
        // 不用前端处理跨域,后台已处理跨域
        // "Content-Type": "Access-Control-Allow-Origin",
        // 设置后后台接口可以通过koa-bodyparser中间件解析body参数
        'Content-Type': 'application/json'
    },
});


/**
 * 请求拦截
*/
_axios.interceptors.request.use(
    config => {
        console.log('请求拦截参数', config);
        return config;
    },
    error => {
        return Promise.reject(error);
    },
)

/**
 * 响应拦截
*/
_axios.interceptors.response.use(
    response => {
        const { code, message } = response.data;
        if(code === 200) {
            return response;
        } else if (code === 401) {
            ElMessage.error("您无权进行此操作");
        } else if (code === 403) {
            ElMessage.error("您尚未登陆，请先登录");
        } else {
            ElMessage.error(message);
        }

        return Promise.reject(response);
    },
    error => {
        if (error === "Cancel") {
            return Promise.reject(error);
        }

        let message = error.message;
        if (message === "Network Error") {
            message = "网络连接异常";
        } else if (message?.includes(3000)) {
            message = "请求超时，请联系管理员";
        } else if (message?.includes("Request failed with status code")) {
            message = "未知异常，请联系管理员！"
        }

        ElMessage.error(message);

        return Promise.reject(error);
    }
);

export default _axios;